Основы статистики
Нормальное распределение
Плотность вероятности и функция распределения
Плотность вероятности
Гистограмма выборки позволяет оценить на качественном уровне форму распределения данных. Точная форма распределения данных задается функцией плотности вероятности (pdf, probability density function). Плотность вероятности – это математическая функция , составленная таким образом, что площадь под графиком функции на любом интервале равна вероятности того, что случайная величина попадет в этот интервал:
Если случайная величина дискретная, то плотность вероятности – это нормализованная гистограмма данных. Для непрерывной случайной величины плотность вероятности можно рассматривать как предельный случай гистограммы, ширина столбцов которой стремится к нулю.
Снова загрузим результаты измерений длины и толщины клюва для двух видов вьюрков. Для этого сначала подключим необходимые библиотеки, прочитаем файл с данными finchData.csv, выделим из него данные для каждого из двух видов вьюрков в отдельные таблицы scandens и fortis и создадим массивы с данными измерений длины и толщины клюва для каждого вида вьюрков и для каждого года наблюдения отдельно:
using CSV, DataFrames, Plots, StatsPlots, Statistics, StatsBase, Distributions
data = CSV.read("finchData.csv", DataFrame)
scandens = data[data.Species .== "scandens", :]
fortis = data[data.Species .== "fortis", :]
sLength1975 = scandens.BeakLength[scandens.Year .== 1975, :]
sLength2012 = scandens.BeakLength[scandens.Year .== 2012, :]
sDepth1975 = scandens.BeakDepth[scandens.Year .== 1975, :]
sDepth2012 = scandens.BeakDepth[scandens.Year .== 2012, :]
fLength1975 = fortis.BeakLength[fortis.Year .== 1975, :]
fLength2012 = fortis.BeakLength[fortis.Year .== 2012, :]
fDepth1975 = fortis.BeakDepth[fortis.Year .== 1975, :]
fDepth2012 = fortis.BeakDepth[fortis.Year .== 2012, :];
С помощью функции density из библиотеки StatsPlots можно построить график эмпирической оценки плотности вероятности распределения.
Пример. Построим график эмпирической оценки плотности вероятности для длины клюва кактусовых земляных вьюрков (scandens) по результатам наблюдений 1975 года.
density(sLength1975)
✏️Задание 1
Постройте график эмпирической оценки плотности вероятности для толщины клюва кактусовых земляных вьюрков (scandens) по результатам наблюдений 2012 года.
Решение
density(sDepth2012)
Функция распределения
Функция распределения вероятности – другая важная функция в статистике. Это функция , значение которой в точке равно интегралу от функции плотности вероятности, взятому в пределах от до :
Эмпирической функцией распределения вероятностей называется приближение функции распределения, полученное с помощью выборки. В Engee эмпирическая функция распределения вычисляется с помощью функции ecdf из библиотеки StatsBase, а функция ecdfplot из библиотеки StatsPlots выполняет построение ее графика.
Пример. Найдем эмпирическую оценку функции распределения и построим ее график для длины клюва кактусовых земляных вьюрков (scandens) по результатам наблюдений 1975 года. Для этого сначала с помощью функции vec преобразуем наши данные из типа данных Matrix в тип Vector, а затем используем функции ecdf и ecdfplot.
ecdf(vec(sLength1975))
ecdfplot(vec(sLength1975))
✏️Задание 2
Постройте график эмпирической оценки функции распределения для толщины клюва кактусовых земляных вьюрков (scandens) по результатам наблюдений 2012 года.
Решение
ecdfplot(vec(sDepth2012))
Нормальное распределение
Нормальное распределение (или распределение Гаусса) – это распределение вероятностей непрерывной случайной величины в форме колокола (с пиком в центре и симметричными боковыми сторонами). Плотность нормального распределния имеет вид:
Оно определяется двумя параметрами: – математическое ожидание (среднее значение) и – среднее квадратическое отклонение ( – дисперсия распределения).
В окружающем нас мире часто встречаются величины, имеющие нормальное распределение.
Стандартным нормальным распределением называется частный случай нормального распределения при и . Его плотность вероятности равна:
Создание и визуализация нормально распределенной случайной величины
В Engee с помощью функции randn(m, n) можно сгенерировать матрицу случайных чисел размером , имеющих стандартное нормальное распределение.
Пример. Сгенерируем матрицу случайных чисел размером , имеющих стандартное нормальное распределение, и построим гистограмму полученных данных.
X = randn(1000, 1);
histogram(X)
Функция Normal($\mu$, $\sigma$) из библиотеки Distributions позволяет создать нормальное распределение с произвольно заданными математическим ожиданием и средним квадратическим отклонением . Затем с помощью функции rand(p, n) генерируется вектор из реализаций случайной величины, заданной законом распределения .
Пример. Сгенерируем вектор из 1000 реализаций нормально распределенной случайной величины с математическим ожиданием и средним квадратическим отклонением и построим гистограмму полученных данных.
p = Normal(5, 3);
Y = rand(p, 1000);
histogram(Y)
✏️Задание 3
Постройте на одном полотне две гистограммы: гистограмму распределения длины клюва кактусовых земляных вьюрков (scandens) по результатам наблюдений за 1975 год (данные содержатся в массиве sLength1975) и гистограмму распределения реализаций нормальной случайной величины с математическим ожиданием и средним квадратическим отклонением, равными их оценкам на основе выборки sLength1975. Здесь – объем выборки (число наблюдений).
Подсказка
Напомним, что среднее арифметическое значений выборки вычисляется с помощью функции mean, среднее квадратическое отклонение – с помощью функции std, а объем выборки (число наблюдений) – с помощью функции length.
Решение
mu = mean(sLength1975);
sigma = std(sLength1975);
n = Normal(mu, sigma);
L = rand(n, length(sLength1975));
histogram(sLength1975, fillalpha=0.2, label = "Наблюдения")
histogram!(L, fillalpha=0.2, label = "Модель")
xlabel!("Длина клюва, мм")
ylabel!("Количество наблюдений")
Сравнивая гистограммы, мы видим, что длина клюва вьюрков распределена по закону, близкому к нормальному.
Подбор параметров распределения
Для подбора параметров распределения используется функция fit(p, data), где p – выбранный закон распределения, data – массив данных, для которых подбираются параметры.
Пример. Подберем параметры нормального распределения для результатов измерения толщины клюва кактусовых земляных вьюрков (scandens) за 2012 год.
wfit = fit(Normal, sDepth2012)
Вывод этой функции – это объект особого типа, хранящий распределение плотности вероятности. Чтобы использовать параметры этого распределения в своих дальнейших расчетах, можно вызвать их через стандартные функции библиотеки Distributions:
mean(wfit), std(wfit)
Отметим, что математическое ожидание и среднее квадратическое отклонение, полученные непосредственно по данным выборки, не совпадают с параметрами распределения.
mean(sDepth2012), std(sDepth2012)
✏️Задание 4
Подберите параметры нормального распределения для результатов измерения толщины клюва средних земляных вьюрков (fortis) за 1975 и 2012 годы.
Решение
wfit1975 = fit(Normal, fDepth1975);
mean(wfit1975), std(wfit1975)
wfit2012 = fit(Normal, fDepth2012);
mean(wfit2012), std(wfit2012)